// // symbol 象征  独一无二的
// let s1 = Symbol('foo')// 'foo ' zuo
// let s2 = Symbol('bar')
// console.log(s1 === s2); //false
// const obj = {
//   name: 'imooc', 
//   toString() {
//     return this.name
//   }
// }
// let s = Symbol(obj)

// let s = Symbol('aaaa') //
// console.log(s.description); // aaaa 

// let s1 = Symbol.for('foo') // Symbol.for 全局声明 ,如果有 则声明指向有的那个
// let s2 = Symbol.for('foo')
// console.log(s1 === s2); // true

// function foo() {
//   return Symbol.for('foo')
// }

// console.log(Symbol.keyFor('foo'));// 返回symbol登记过的描述

// const grade = {
//   张三: {address: 'xxx', tel: '111'},
//   李四: {address: 'yyy', tel: '222'},
//   张三: {address: 'zzz', tel: '333'} //   这里章三会被覆盖
// }

const stu1 = Symbol('张三') // 描述不一样,那么就不是同一变量不会覆盖
const stu2 = Symbol('张三')
const grade = {
  [stu1]: {address: 'xxx', tel: '111'},
  [stu2]: {address: 'yyy', tel: '222'}
}
console.log(grade);

class User {
  constructor(name) {
    this.name = name
  }
  getName() {
    return this.name
  }
}

const user = new User('yk')


// for in 不能取到 Symbol 属性
for(let key of Object.keys(user)) {
  console.log(key);
}

for(let key of Object.getOwnPropertySymbols(user)) {
  //只获得私有属性
}

for(let key of Reflect.ownKeys(user)) {
  // 能获得私有属性和普通属性
}

// 一种新的原始数据
// symbol 全局里登记symbol



